using System;
using System.Collections.Generic;

namespace IllicitOnion.LinqDimensions
{
	public partial class CompoundEnumerable<T0, T1> : IEnumerable<T0, T1>
	{
		protected readonly IEnumerable<T0> m_Left;
		protected readonly IEnumerable<T1> m_Right;
		public CompoundEnumerable(IEnumerable<T0> t0s, IEnumerable<T1> t1s)
		{
			if (t0s == null)
			{
				throw new ArgumentNullException("t0s");
			}
			if (t1s == null)
			{
				throw new ArgumentNullException("t1s");
			}
			m_Left = t0s;
			m_Right = t1s;
		}
	}
	public partial class CompoundEnumerable<T0, T1, T2> : IEnumerable<T0, T1, T2>
	{
		protected readonly IEnumerable<T0, T1> m_Left;
		protected readonly IEnumerable<T2> m_Right;
		public CompoundEnumerable(IEnumerable<T0> t0s, IEnumerable<T1> t1s, IEnumerable<T2> t2s)
		{
			if (t0s == null)
			{
				throw new ArgumentNullException("t0s");
			}
			if (t1s == null)
			{
				throw new ArgumentNullException("t1s");
			}
			if (t2s == null)
			{
				throw new ArgumentNullException("t2s");
			}
			m_Left = new CompoundEnumerable<T0, T1>(t0s, t1s);
			m_Right = t2s;
		}
		public CompoundEnumerable(IEnumerable<T0, T1>left, IEnumerable<T2> right)
		{
			if (left == null) {
				throw new ArgumentNullException("left");
			}
			if (right == null) {
				throw new ArgumentNullException("right");
			}
			m_Left = left;
			m_Right = right;
		}
	}
}